home *** CD-ROM | disk | FTP | other *** search
- (define (break proc . nome)
- (let ((code (procedure-code proc)))
- (set-cdr! code (list 'begin
- (list 'bkpt (if (string? (car nome))
- (car nome)))
- (cdr code)))
- (set-procedure-code! proc code)))
-
- (define (unbreak proc)
- (let ((code (procedure-code proc)))
- (if (eq? (caaddr code) 'bkpt)
- (set-cdr! code (cadddr code))
- (error "procedure is not breaked"))
- (set-procedure-code! proc code)))
-
- (define (*tracer* nome env)
- (if (string? nome)
- (display nome)
- (display "entering procedure with parameters:"))
- (do ((ar (environment-bindings env) (cdr ar)))
- ((null? ar))
- (print (cdar ar))
- (newline)))
-
- (define (trace proc . nome)
- (let ((code (procedure-code proc)))
- (set-cdr! code
- (list 'begin
- (list '*tracer* (if (string? (car nome))
- (car nome))
- (list 'the-environment))
- (cdr code)))
- (set-procedure-code! proc code)))
-
- (define (untrace proc)
- (let ((code (procedure-code proc)))
- (if (eq? (caaddr code) '*tracer*)
- (set-cdr! code (cadddr code))
- (error "procedure is not traced"))
- (set-procedure-code! proc code)))
-
- (macro assert (lambda (x)
- `(if ,(cadr x)
- #t
- (bkpt ,@(cddr x)))))
-
-